/*
	Билинейная интерполяция
*/

#pragma once

typedef struct
{
	double *vals_x;		/* Значения X */
	double *vals_y;		/* Значения Y */
	double **vals_z;	/* Значения Z */

	int binpol_degr_x;	/* Степень полинома по X */
	int binpol_degr_y;	/* Степень полинома по Y */

} binpol_t;

typedef struct
{
	double arg_x;
	double arg_y;

} point_t;

#define BINPOL_T_SZ sizeof(binpol_t)

/* Создание объекта полинома */
binpol_t *binpol_new(const int, const int);

/* Удаление объекта полинома */
void binpol_destroy(binpol_t *);

/* Генерирование исходных данных */
void binpol_gen_data(const binpol_t *, point_t, point_t, double (*) (const point_t));

/* Вычисление значения полинома */
double binpol_get_val(binpol_t *, const point_t);